package ar.edu.uade.centroDistribucion.web;


import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import ar.edu.uade.centroDistribucion.web.EnvioATienda;
import ar.edu.uade.centroDistribucion.bussinesDelegate.*;
import ar.edu.uade.centroDistribucion.herramientas.FileWriter;
import ar.edu.uade.centroDistribucion.valueObjects.*;

public class EnvioATienda {
	
	private VistaEnvTVO vEnvTVO;
	private List<VistaEnvTVO> listaVEnvTVO;
	private EnvTVO envioVO;
		
	public String GenerarEnvio()
	{
		int tiendaId =0;
		int tiendaAnteriorId = 0;
		int cant = 0;
		int envioATiendaId=0;
		EnvTVO envio;
		ArticuloVO artVO;
		List<ArticuloVO> listaArtVO;
		BusinessDelegate facade;
		try {
			facade = new BusinessDelegate();			
			listaArtVO = new ArrayList<ArticuloVO>();
			envio = new EnvTVO();
			System.out.println("Cantidad de datos: "+ listaVEnvTVO.size());
			for (VistaEnvTVO vista : listaVEnvTVO) {
				tiendaAnteriorId = tiendaId;
				tiendaId = vista.getTiendaId();
				envioATiendaId=vista.getEnvioATiendaId();
				if (tiendaId != tiendaAnteriorId && cant>0) {
					envio.setArticulos(listaArtVO);
					GenerarXML(envio, tiendaId);
					facade.GenerarEnvioATienda(envio,envioATiendaId );
					// Tengo que crear un objeto envio nuevo porque es otra tienda
					envio = new EnvTVO();					
					listaArtVO = new ArrayList<ArticuloVO>();		
				}
				artVO= new ArticuloVO();
				artVO.setCantidad(vista.getCantAEnviar());
				artVO.setReferencia(vista.getArticulo());
				listaArtVO.add(artVO);
				cant++;				
			}
			//Si quedaron objetos sin completar en el for se tienen que enviar tambien.
			if(listaArtVO.size()>0){
				envio.setArticulos(listaArtVO);
				GenerarXML(envio, tiendaId);
				facade.GenerarEnvioATienda(envio, envioATiendaId);
			}
				
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("Error al generar la envt" + e.getMessage());
		}
		
		return null;		
	}
	
     private void GenerarXML(EnvTVO envTVO,int idTienda){
		
		try {
			
			String strXML;
			System.out.println("XML "+idTienda+": "+envTVO);
			String url = "C:\\EnvT"+idTienda+".xml";
			
			XStream xStream = new XStream();
			xStream.alias("EnvT", EnvTVO.class);
			xStream.alias("Articulo", ArticuloVO.class);		
			strXML = xStream.toXML(envTVO);
			
			FileWriter fileWriter = new FileWriter(url);
			fileWriter.write(strXML);
			System.out.println("EnvT Generada con exito.");
			
			}catch (Exception e) {
				System.out.println("Error al generar el archivo" + e.getMessage() + e.toString());
			}	
	}
	public String cargarEnvT(){

		System.out.println("cargarEnvT");
		BusinessDelegate facade;
		try {
			facade = new BusinessDelegate();
			listaVEnvTVO = facade.IniciarEnvioATienda();
			
			if (listaVEnvTVO != null)
			{
				System.out.println("CON DATOS!!");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println(e.getStackTrace());
		}
	
		
		return "success";
	}

	public EnvTVO getEnvioVO() {
		return envioVO;
	}

	public void setEnvioVO(EnvTVO envioVO) {
		this.envioVO = envioVO;
	}


	public List<VistaEnvTVO> getListaVEnvTVO() {
		return listaVEnvTVO;
	}

	public void setListaVEnvTVO(List<VistaEnvTVO> listaVEnvTVO) {
		this.listaVEnvTVO = listaVEnvTVO;
	}

	public VistaEnvTVO getVEnvTVO() {
		return vEnvTVO;
	}

	public void setVEnvTVO(VistaEnvTVO envTVO) {
		vEnvTVO = envTVO;
	}
}